const { body, query } = require("express-validator");
const mongoose = require("mongoose");
const { id, pageno, pagesize } = require("../common");

const name = (optional = false) => {
    if (optional) {
        return body("name")
            .optional()
            .trim()
            .notEmpty()
            .withMessage("壁纸名称不能为空")
            .bail()
            .isLength({ min: 1, max: 15 })
            .withMessage("壁纸名称长度必须在1-15个字符之间");
    }
    return body("name")
        .trim()
        .notEmpty()
        .withMessage("壁纸名称不能为空")
        .bail()
        .isLength({ min: 1, max: 15 })
        .withMessage("壁纸名称长度必须在1-15个字符之间");
};

const thumbnail = (optional = false) => {
    if (optional) {
        return body("thumbnail")
            .optional()
            .trim()
            .notEmpty()
            .withMessage("缩略图不能为空")
            .bail()
            .isURL()
            .withMessage("缩略图不能为空");
    }
    return body("thumbnail")
        .trim()
        .notEmpty()
        .withMessage("缩略图不能为空")
        .bail()
        .isURL()
        .withMessage("缩略图不能为空");
};

const imageUrl = (optional = false) => {
    if (optional) {
        return body("imageUrl")
            .optional()
            .trim()
            .notEmpty()
            .withMessage("壁纸地址不能为空")
            .bail()
            .isURL()
            .withMessage("壁纸地址不能为空");
    }
    return body("imageUrl")
        .trim()
        .notEmpty()
        .withMessage("壁纸地址不能为空")
        .bail()
        .isURL()
        .withMessage("壁纸地址不能为空");
};

const collectionId = body("collectionId").custom((value) => {
    if (!value) {
        throw new Error("图集id不能为空");
    }
    if (!mongoose.Types.ObjectId.isValid(value)) {
        throw new Error("无效的id");
    }
    return true;
});

const summary = (optional = false) => {
    if (optional) {
        return body("summary")
            .optional()
            .trim()
            .notEmpty()
            .withMessage("壁纸简介不能为空")
            .bail()
            .isLength({ min: 10, max: 100 })
            .withMessage("壁纸简介长度必须在10-100个字符之间");
    }
    return body("summary")
        .trim()
        .notEmpty()
        .withMessage("壁纸简介不能为空")
        .bail()
        .isLength({ min: 10, max: 100 })
        .withMessage("壁纸简介长度必须在10-100个字符之间");
};

const Tags = body("tags")
    .optional()
    .trim()
    .notEmpty()
    .withMessage("标签不能为空")
    .bail()
    .isString()
    .withMessage("标签只能是文本");

module.exports = {
    add: [name(), thumbnail(), imageUrl(), summary(), collectionId, Tags],
    detail: [id],
    delete: [id],
    update: [
        id,
        name(true),
        thumbnail(true),
        summary(true),
        imageUrl(true),
        Tags
    ],
    downloads: [id],
    ratings: [id]
};
